﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
//int main()
//{
//	printf("haha");
//	return 0;
//}
//int main()
//{
//	int arr[4] = { 0 };
//	int i = 0;
//	for(i=0;i<4;i++)
//	{
//		scanf("%d", &arr[i]);
//	}
//	int max = 0;
//	for (i = 0; i < 4; i++)
//	{
//		if (max < arr[i])
//		{
//			max = arr[i];
//		}
//	}
//	printf("%d\n", max);
//	return 0;
//}

//int main()
//{
//	char arr1[] = "123456";
//	char arr2[20] = { 0 };
//	int i = 0;
//	for (i = 0; i < 3; i++)
//	{
//		printf("请输入密码：");
//		scanf("%s", &arr2);
//		if (strcmp(arr1, arr2) == 0)
//		{
//			printf("密码正确\n");
//			break;
//		}
//		else
//		{
//			printf("密码错误,\n");
//		}
//	}
//	if (3 == i)
//	{
//		printf("三次密码都错误，请退回\n");
//	}
//	return 0;
//}
//int main()
//{
//	int n = 1;
//	while(n)
//	{
//		scanf("%d", &n);
//		if (n % 2 == 1)
//		{
//			printf("%d是奇数\n", n);
//		}
//		else
//		{
//			printf("%d是偶数\n", n);
//		}
//	}
//	return 0;
//}
//输⼊⼀个年龄， >= 18岁就输出：成年，否则就输出：未成年
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	if (n >= 18)
//	{
//		printf("成年\n");
//	}
//	else
//	{
//		printf("未成年\n");
//	}
//	return 0;
//}

//void test1()
//{/*
//	 输⼊⼀个⼈的年龄
//		如果年龄 < 18岁，打印"少年"
//		如果年龄在18岁⾄44岁打印"⻘年"
//		如果年龄在45岁⾄59岁打印"中⽼年"
//		如果年龄在60岁⾄89岁打印"⽼年"
//		如果90岁以上打印"⽼寿星"*/
//	int n = 1;
//	printf("请输入一个年龄：");
//	while(n)
//	{
//		scanf("%d", &n);
//		if (n <= 18)
//		{
//			printf("少年\n");
//		}
//		else if (n > 18 && n <= 44)
//		{
//			printf("qingnian\n");
//		}
//		else if (n >= 45 && n <= 59)
//		{
//			printf("zhonglaonian\n");
//		}
//		else if (n >= 60 && n <= 89)
//		{
//			printf("laonian\n");
//		}
//		else if (n >= 90)
//		{
//			printf("shouxing\n");
//		}
//	}
//}
//void test2()
//{
//	//使⽤条件表达式实现找两个数中较⼤值。
//	int n = 0;
//	int m = 0;
//	scanf("%d%d", &n, &m);
//	int max = n > m ? n : m;
//	printf("%d\n", max);
//}
//void test3()
//{
//	//输⼊⼀个年份year，判断year是否是闰年
//	/*闰年判断的规则：
//		1. 能被4整除并且不能被100整除是闰年
//		2. 能被400整除是闰年*/
//	int n = 1;
//	while(n)
//	{
//		scanf("%d", &n);
//		if (((n % 4 == 0) && (n % 100 != 0)) || (n % 400 == 0))
//		{
//			printf("%d是闰年\n", n);
//		}
//		else
//			printf("%d不是闰年\n",n);
//	}
//}
//void test4()
//{
//	//输⼊任意⼀个整数值，计算除3之后的余数
//	int n = 0;
//	while(scanf("%d", &n))
//	{
//		int ret = n % 3;
//		printf("n/3之后的余数为：%d\n", ret);
//	}
//	
//}
//void test5()
//{
//	/*输⼊⼀个1~7的数字，打印对应的星期⼏
//		例如：
//		输⼊：1输出：星期⼀
//		输⼊：2输出：星期⼆
//		输⼊：3输出：星期三
//		输⼊：4输出：星期四
//		输⼊：5输出：星期五
//		输⼊：6输出：星期六
//		输⼊：7输出：星期天*/
//	/*switch (expression) {
//	case value1: statement//case后面是有空格地
//	case value2: statement
//	default: statement*/
//	int n = 0;
//	while (scanf("%d", &n))
//	{
//		switch (n)
//		{
//		case 1:
//			printf("1\n");
//			break;
//		case 2:
//			printf("2\n");
//			break;
//		case 3:
//			printf("3\n");
//			break;
//		case 4:
//			printf("4\n");
//			break; 
//		case 5:
//			printf("5\n");
//			break; 
//		case 6:
//			printf("6\n");
//			break; 
//		case 7:
//			printf("7\n");
//			break;
//		default:
//			printf("输入错误\n");
//			break;
//		}
//	}
//}
//void test6()
//{
//	/*1. 输⼊1 - 5，输出的是“⼯作⽇”; 
//		2. 输⼊6 - 7，输出“休息⽇”*/
//	int n = 0;
//		while (scanf("%d", &n))
//		{
//			switch (n)
//			{
//			case 1:
//			case 2:
//			case 3:
//				
//			case 4:
//				
//			case 5:
//				printf("工作日\n");
//				break;
//			case 6:
//			case 7:
//				printf("休息日\n");
//				break;
//			default:
//				printf("输入错误\n");
//				break;
//			}
//		}
//}
//void test7()
//{
//	//计算1~100之间3的倍数的数字之和
//	int i = 0;
//	int sum = 0;
//	for (i = 0; i <= 100; i+=3)
//	{
//		sum += i;
//	}
//	printf("%d\n", sum);
//}
// 
//do
//语句；
//while (表达式)；
//void test8()
//{
//	/*输⼊⼀个正整数，计算这个整数是⼏位数？
//		例如：
//		输⼊：1234输出：4
//		输⼊：12输出：2*/
//	int n = 0;
//	scanf("%d", &n);
//	int ret = 1;
//	do
//	{
//		n /= 10;
//		ret++;
//	} while (n / 10);
//	printf("%d\n", ret);
//}
#include<math.h>
//void test9()
//{/*
//	找出100~200之间的素数，并打印在屏幕上。
//		注：素数⼜称质数，只能被1和本⾝整除的数字。*/
//	int i = 0;
//	for (i = 100; i <= 200; i++)
//	{
//		int flag = 1;//**flag要放在for循环里面
//		int j = 0;
//		for (j = 2; j < sqrt(i); j++)
//		{
//			if (i % j == 0)
//			{
//				flag = 0;
//				break;
//			}
//		}
//		if (flag == 1)
//		{
//			printf("%d ", i);
//		}
//	}
//}
//int main()
//{
//	//test9();
//	//test8();
//	//test7();
//	//test6();
//	//test1();
//	//test2();
//	//test3();
//	//test4();
//	//test5();
//	return 0;
//}
//猜数字
//游戏要求：
//1. 电脑⾃动⽣成1~100的随机数
//2. 玩家猜数字，猜数字的过程中，根据猜测数据的⼤⼩给出⼤了或⼩了的反馈，直到猜对，游戏结束
#include<time.h>
#include<stdlib.h>
//void play()
//{
//	int ret = rand() % 100+1;
//	int guess = 0;
//	int i = 0;
//	for(i=5;i>0;i--)
//	{
//		printf("你还有%d次机会\n", i);
//		printf("请猜一个数字：");
//		scanf("%d", &guess);
//		if (ret == guess)
//		{
//			printf("猜对了\n");
//			break;
//		}
//		else if (guess > ret)
//		{
//			printf("猜大了\n");
//		}
//		else if (guess < ret)
//		{
//			printf("猜小了\n");
//		}
//	}
//	if (i == 0)
//	{
//		printf("你失败了，答案是%d\n", ret);
//	}
//	
//}
//void menu()
//{
//	printf("*********\n");
//	printf("**1,play**\n");
//	printf("**0.exit**\n");
//	printf("*********\n");
//}
//int main()
//{
//	
//	srand((unsigned int)time(NULL));
//	int input = 0;
//	do
//	{
//		menu();
//		printf("请选择：");
//		scanf("%d", &input);
//		switch (input)
//		{
//		case 1:
//			play();
//			break;
//		case 0:
//			printf("退出游戏\n");
//			break;
//		default:
//			printf("选择错误，请重新选择\n");
//			break;
//		}
//
//	} while (input);
//	return 0;
//}
//多个字符从两端移动，向中间汇聚
#include<time.h>
#include<stdlib.h>
//int main()
//{
//	char arr1[] = "happy everyday to me,and my around people";
//	char arr2[] = "*****************************************";
//	int sz = sizeof(arr1) / sizeof(arr1[0]);
//	int l = 0;
//	int r = sz - 1;
//	while (l <= r)
//	{
//		arr2[l] = arr1[l];
//		arr2[r] = arr1[r];
//		l++;
//		r--; 
//		system("cls");
//		printf("%s\n", arr2);
//		Sleep(100);
//	}
//	return 0;
//}
//⼆分查找
//在⼀个升序的数组中查找指定的数字n，很容易想到的⽅法就是遍历数组，但是这种⽅法效率⽐较低。
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9 };
//	int n = 7;
//	while(n)
//	{
//		printf("请输入要找的数字\n");
//		scanf("%d", &n);
//		int l = 0;
//		int sz = sizeof(arr) / sizeof(arr[0]);
//		int r = sz - 1;
//		while (l <= r)
//		{
//			int mid = (r + l) / 2;
//			if (n == arr[mid])
//			{
//				printf("找到了，%d的下标为%d\n", n, mid);
//				break;
//			}
//			else if (n > arr[mid])
//			{
//				l = mid + 1;
//			}
//			else if (n < arr[mid])
//			{
//				r = mid - 1;
//			}
//		}
//		if (l >r)
//		{
//			printf("没找到\n");
//		}
//	}
//	
//	return 0;
//}
//int fun(int n)
//{
//	if (n == 1)
//		return 1;
//	else
//		return n * fun(n - 1);
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int ret=fun(n);
//	printf("%d\n", ret);
//	return 0;
//}
//void fun(int n)
//{
//	if (n > 9)
//	{
//		fun(n / 10);
//	}
//	printf("%d ",n%10);
//}
//int main()
//{
//	int n = 1234;
//	fun(n);
//}
//求第n个斐波那契数1 1 2 3 5 8
//int fib(int n)//递归
//{
//	if (n == 1 || n == 2)
//		return 1;
//	else
//		return fib(n - 1) + fib(n - 2);
//}
//int fib1(int n)//迭代
//{
//	int a = 1;
//	int b = 1;
//	int c = 1;
//	while (n > 2)
//	{
//		c = a + b;
//		a = b;
//		b = c;
//		n--;
//	}
//	return c;
//
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int ret=fib1(n);
//	printf("%d\n", ret);
//	return 0;
//}
// 青蛙跳台阶
//有n级台阶，青蛙每次可以跳1级台阶或者2级台阶，问青蛙跳上n级台阶有多少种不同的跳法。
//int jump(int n)
//{
//	if (n == 1)
//		return 1;
//	else if (n == 2)
//		return 2;
//	else
//		return jump(n - 1) + jump(n - 2);
//
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int ret=jump(n);
//	printf("%d\n", ret);
//	return 0;
//}
//求⼀个整数存储在内存中的⼆进制中1的个数。
//int main()
//{
//	int n = 5;//101
//	int count = 0;
//	while (n)
//	{
//		count++;
//		n &= (n - 1);
//	}
//	printf("%d\n", count);
//	return 0;
//}
//int main()
//{
//	int i = 0;
//	int n = 6;//110
//	int count = 0;
//	for (i = 0; i < 32; i++)
//	{
//		if (n & (1 << i))
//		{
//			count++;
//		}
//	}
//	printf("%d\n", count);
//	return 0;
//}
//编写代码将13⼆进制序列的第5位修改为1，然后再改回0//1101
//int main()
//{
//	//00000000 00000000 00000000 00001101
//	int n = 13;
//	n = n | (1 << 5);
//	printf("%d\n", n);
//	n = n & ~(1 << 5);//  ~:按位取反****不太懂
//	printf("%d\n", n);
//	return 0;
//}
// 
//const修饰指针变量的时候
//• const如果放在* 的左边，修饰的是指针指向的内容，保证指针指向的内容不能通过指针来改变。
//但是指针变量本⾝的内容可变。const *
//• const如果放在* 的右边，修饰的是指针变量本⾝，保证了指针变量的内容不能修改，但是指针指 
//向的内容，可以通过指针改变。* const
//交换A和B
//void swap(int* a, int* b)
//{
//	int temp = *a;
//	*a = *b;
//	*b = temp;
//}
//int main()
//{
//	int a = 10;
//	int b = 20;
//	printf("交换前：a=%d,b=%d\n", a, b);
//	swap(&a, &b);
//	printf("交换后：a=%d,b=%d\n", a, b);
//	return 0;
//}
//void print(int n)
//{
//	if (n > 9)
//		print(n / 10);
//	printf("%d ", n%10);
//	
//}
//int main()
//{
//	int n = 1234;
//	print(n);
//	//;
//	return 0;
//}
//冒泡排序
//void bubble_sort(int arr[], int l, int r)
//{
//	int i = 0;
//	for (i = 0; i <= r; i++)
//	{
//		int j = 0;
//		int flag = 1;
//		for (j = 0; j <= r - 1 - l;j++)
//		{
//			if (arr[j] < arr[j + 1])
//			{
//				flag = 1;
//				int temp = arr[j];
//				arr[j] = arr[j + 1];
//				arr[j + 1] = temp;
//				//printf("%d ", arr[j]);
//			}
//		}
//		if (flag == 0)
//		{
//			break;
//		}
//		//printf("/n");
//	}
//}
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9 };
//	int l = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int r = sz - 1;
//	bubble_sort(arr, l,r);
//	int i = 0;
//	for (i = 0; i <= r; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}
//打印计算机//除有问题//**************
//void menu()
//{
//	printf("*********0.exit***********\n");
//	printf("*********1.add************\n");
//	printf("*********2.sub************\n");
//	printf("*********3.mul************\n");
//	printf("*********4.div************\n");
//
//}
//int add(int x, int y)
//{
//	return x + y;
//}
//int sub(int x, int y)
//{
//	return x - y;
//}
//int mul(int x, int y)
//{
//	return x * y;
//}
//int dive(int x, int y)
//{
//	return x / y;
//}
//int main()
//{
//	int input = 0;
//	int x = 0; int y = 0;
//	int ret = 0;
//	int(* p[])(int x,int y) = { 0,add,sub,mul,dive };
//	do
//	{
//		printf("请选择：\n");
//		menu();
//		scanf("%d", &input);
//		
//		if (input > 0 && input < 5)
//		{
//			printf("请输入两个操作数：\n");
//			scanf("%d%d", &x, &y);
//			ret = (*p[input])(x, y);
//			printf("%d\n", ret);
//		}
//		else if(input>4)
//		{
//			printf("选择错误，请重新选择：\n");
//		}
//	} while (input);
//	return 0;
//}
#include<ctype.h>
//int main()
//{
//	int i = 0;
//    char c=0;
//	char arr[] = "Happy Everyday";
//	while (arr[i])
//	{
//		c = arr[i];
//		if (islower(arr[i]))
//		{
//			c -= 32;
// 			arr[i] = toupper(arr[i]);
//		}
//		putchar(c);
//		i++;
//		//printf("%s", arr[i]);
//	}
//	return 0;
//}
//strlen的模拟实现：
#include<assert.h>
//法一
//int my_strlen(const char *arr)
//{
//	assert(arr);
//	int count = 0;
//	int i = 0;
//	while (*arr!= '\0')
//	{
//		count++;
//		arr++;
//	}
//	return count;
//}
// 法二
// // 不能创建临时变量计数器//采用递归
//int my_strlen(char* arr)
//{
//	assert(arr);
//	if (*arr == '\0')
//		return 0;
//	else
//		return 1 + my_strlen(arr + 1);
// }
//法三：指针减指针
//int my_strlen(char* arr)
//{
//	assert(arr);
//	char* p = arr;
//	while (*p != '\0')
//	{
//		p++;
//	}
//	return p - arr;
//}
//int main()
//{
//	char arr[20] = { 0 };
//	scanf("%s", &arr);
//	int ret=my_strlen(arr);
//	printf("%d\n", ret);
//	return 0;
//}
//char* strcpy(char* destination, const char* source);
//strcpy的模拟实现:
//char * my_strcpy(char* arr1, const char* arr2)
//{
//	assert(arr1 && arr2);
//	char* arr = arr1;
//	while (*arr2 != '\0')
//	{
//		*arr = *arr2;
//		arr++;
//		arr2++;
//	}
//	return arr1;
//}
//int main()
//{
//	char arr1[50] = { 0 };
//	char arr2[] = "happy everyday";
//	char *ret=my_strcpy(arr1, arr2);
//	printf("ret=%s\n", ret);
//	//printf("arr2=%s\n", arr1);
//	return 0;
//}
// strncpy函数的使⽤
//char* strncpy(char* destination, const char* source, size_t num);

//char* my_strncpy(char* arr1, const char* arr2, size_t n)//size_t==unsigned
//{
//	assert(arr1 && arr2);
//	char* arr = arr1;
//	if (*arr2 != '\0')
//	{
//		int i = 0;
//		for (i = 0; i < n; i++)
//		{
//			*arr = *arr2;
//			arr++;
//			arr2++;
//		}
//	}
//	return arr1;
//}
//int main()
//{
//	char arr1[50] = { 0 };
//	char arr2[] = "happy everyday or someday";
//	int n = 5;
//	char *ret=my_strncpy(arr1, arr2,n);
//	printf("ret=%s\n", ret);
//	return 0;
//}

// 模拟实现strcat函数//字符串追加
//char* my_strcat(char* dest, const char* src)
//char* my_strcat(char* dest, const char* src)
//{
//	assert(dest && src);
//	char* arr = dest;
//	while (*arr != '\0')
//	{
//		arr++;
//	}
//	while (*src != '\0')
//	{
//		*arr = *src;
//		arr++;
//		src++;
//	}
//	*arr = *src;//把'\0'复制到dest中
//	return dest;
//}
//int main()
//{
//	char arr1[50] = "happy";
//	char arr2[] = " everyday";
//	char* arr = my_strcat(arr1, arr2);
//	printf("%s\n", arr);
//	return 0;
//}

//模拟实现strncat函数//字符串追加
//char* my_strcat(char* dest, const char* src)
//char* my_strncat(char* dest, const char* src,size_t n)
//{
//	assert(dest && src);
//	char* arr = dest;
//	while (*arr != '\0')
//	{
//		arr++;
//	}
//
//	if (*src != '\0')
//	{
//		int i = 0;
//		for (i = 0; i < n; i++)
//
//		{
//			*arr = *src;
//			arr++;
//			src++;
//		}
//	}
//	*arr = '\0';//把'\0'复制到dest中
//	return dest;
//}
//int main()
//{
//	char arr1[50] = "happy";
//	char arr2[] = " everyday";
//	int n = strlen(arr2);
//	char* arr = my_strncat(arr1, arr2,n);
//	printf("%s\n", arr);
//	return 0;
//}
//标准规定：
//◦ 第⼀个字符串⼤于第⼆个字符串，则返回⼤于0的数字
//◦ 第⼀个字符串等于第⼆个字符串，则返回0
//◦ 第⼀个字符串⼩于第⼆个字符串，则返回⼩于0的数字
//◦ 那么如何判断两个字符串？ ⽐较两个字符串中对应位置上字符ASCII码值的⼤⼩。
//strcmp函数的模拟实现：//字符串比较大小
//int my_strcmp(const char* str1, const char* str2)//再复习
//{
//	assert(str1 && str2);
//	while (*str1 ==*str2 )
//	{
//		if (*str1 == '\0')
//		{
//			return 0;
//		}
//		str1++;
//		str2++;
//	}
//	return *str1 - *str2;
//
//}
//int main()
//{
//	char arr1[] = "abcd";
//	char arr2[] = "abcde";
//	int ret = my_strcmp(arr1, arr2);
//	if (ret > 0)
//	{
//		printf(">\n");
//	}
//	else if (ret == 0)
//	{
//		printf("=\n");
//	}
//	else if (ret < 0)
//	{
//		printf("<\n");
//	}
//	return 0;
//}
// strncmp模拟实现
//int strncmp(const char* str1, const char* str2, size_t num);
//int my_strncmp(const char* str1, const char* str2,int n)//有点问题
//{
//	assert(str1 && str2);
//	while (*str1 == *str2)
//	{
//		for(int i=0;i<n;i++)
//		{
//			if (*str1 == '\0')
//			{
//				return 0;
//			}
//			str1++;
//			str2++;
//		}
//	}
//	return *str1 - *str2;
//
//}
//int main()
//{
//	char arr1[] = "abcde";
//	char arr2[] = "abcdefg";
//	int n = 5;
//	int ret = my_strncmp(arr1, arr2,n);
//	if (ret > 0)
//	{
//		printf(">\n");
//	}
//	else if (ret == 0)
//	{
//		printf("=\n");
//	}
//	else if (ret < 0)
//	{
//		printf("<\n");
//	}
//	return 0;
//}
// strstr:函数返回字符串str2在字符串str1中第⼀次出现的位置
//char* strstr(const char* str1, const char* str2);
//char* my_strstr(const char* arr1, const char* arr2)
//{
//
//}
//int main()
//{
//	char arr1[] = "happy everyday to me ,and my around people";
//	char arr2[] = "me";
//	char *ret=my_strstr(arr1, arr2);
//	printf("%s\n", ret);
//	return 0;
//}
